מבוא לפרק: : עצים.(ree) עצים הם גרפים חסרי מעגלים. כך, כיוון פרק זה הוא מעין הפוך לשני הפרקים הקודמים. עץ יסומן לרב על ידי במשפטים 8.1-8.3 נפתח חלק מתכונותיו, ובהמשך נדון בהיבטים שונים של "עץ פורש" של גרף קשיר. הגדרה: גרף ללא מעגלים נקרא יער. גרף קשיר בלי מעגלים נקרא עץ. דוגמה 8.1: לפניך עץ מסדר 6. תרגילים: הוכיחי: כל עץ הוא גרף זוגי. בין כל שני קודקודים בעץ קיימת מסילה יחידה. (למשל, המסלול היחיד שמחבר את הקודקודים 2 ו- 6 בדוגמה הוא 2-4-5-6)..1.2 - עמוד 1
הגדרה: קודקוד בעץ בעל ערכיות 1 נקרא קודקוד קצה או עלה. צלע קצה היא צלע שאחד מקודקודיו הוא עלה. נקודת חתך בגרף כל שהוא, הוא קודקוד שסילוקו מהגרף (ביחד עם כל הצלעות המחברות אליו) מגדיל את מספר מרכיבי הקשירות של הגרף. בדוגמה 1,2,3,6, 8.1 הם עלים, וכן הקודקודים 4,5 הם נקודות חתך. בפרט, שימי לב שהסרת קודקוד 4 יוצרת תת גרף עם 4 מרכיבי קשירות! שמת לב שבדוגמה, כל קודקוד הוא או עלה או נקודת חתך? מסתבר שהמצב הכללי הוא כמו הדוגמה. תרגיל 3. הוכיחי: בעץ, כל קודקוד הוא או עלה או נקודת חתך. בפרק זה, דיברנו עד כה על הסרת קודקודים (ובעקבות זה, גם צלעות המחוברות אליהם). המשפט הבא נותן אפיון של עץ במונחים של צלעות. משפט 8.1 גרף קשיר הוא עץ כל צלע בו הוא גשר. ניזכר (מפרק 5) שגשר בגרף היא צלע שהסרתה הופכת את תת הגרף הנוצר לגרף שאינו קשיר. תרגיל: 1. הוכיחי שספר מרכיבי קשירות בעץ שממנו הוסרה צלע הוא. 2 - עמוד 2
הוכחת משפט 8.1: : תהא uv צלע בעץ. עלינו להראות ש- uv גשר, זאת אומרת שהגרף על ידי הסרת הצלע, uv הוא גרף לא קשיר. המתקבל מ- -הגרף \ { uv} נניח בשלילה, נניח v ל- u שאינה מכילה את הצלע אינו גשר. אזי תת הגרף uv} ' = \ { נשאר קשיר. לכן, uv כעת, מסילה זו בצירוף הצלע.uv uv : קיימת ב-' מסילה בין היא מעגל ב-, בסתירה! נניח בשלילה שקיים גרף קשיר, אשר כל צלע בו הוא גשר, אך הוא לא עץ. עלינו להגיע לסתירה. כאמור, G גרף אך הוא לא עץ. לכן קיים מעגל ב-. G נביט בצלע כל שהוא uv במעגל. מצד אחד, uv הוא גשר, על פי הנחתינו. לכן u ו- v נמצאים בשני מרכיבי קשירות שונים. אך, מצד שני, המעגל בלי הצלע uv מהווה מסילה בין u ו-! v סתירה זו מוכיחה את הדרוש. המשפט הבא מקשר את מספר הצלעות בעץ עם סדרו: משפט 8.2 יהא > E =< V, עץ. אזי 1 V. E = ואכן, בעץ שבדוגמה 8.1, יש 6 קודקודים, וכן 5=6-1 צלעות. הוכחת משפט 8.2: באינדוקציה על. n = V E = 0 = V 1 ו-. אם = 1 n, אזי K 1 - עמוד 3
עץ מסדר. n נביט בצלע כל שהיא לא קשיר (שכן הורד ממנו גשר) חסר מעגלים (שכן מהווה גשר ב-, ולכן }\ הוא יער-גרף uv} \{ חסר uv} =< V, E יהא עכשיו 2 n, ונניח נכונות לכל עצים מסדר קטן מ-. n יהא > חסר מעגלים, לכן גם על פי משפט uv 8.1. ב- uv מעגלים) בעל 2 מרכיבי קשירות,, 2 1 (למה 2 מרכיבי קשירות?)., ולכן נקבל, על פי הנחת האינדוקציה בכל מרכיב: מספר הקודקודים בכל מרכיב הוא פחות מ- n וכן ) 1. E ) = V ( ( 2 2 E( 1 ) = V ( 1 ) 1 אך מתקיים: א. E = E וכן 1 ( 1 ) + E( 2 ) + uv ) ( V. V = V ) + נציב לקבל : ב. ( 1 2 E( E = E( 1 ) + כדרוש. 2 ) + 1 = V ( 1 ) 1+ V ( 2 ) 1+ 1 = V 1 א ב uv 14243 14243 uv E( 1 ) E( 2 ) מקבלים: התרגיל הבא, שניעזר בו בהמשך, מאפיין את הגרפים הקשירים חסרי המעגלים בעלי התכונה. E = V 1 תרגיל: הוכיחי: יהא גרף קשיר המקיים G =< V, E חסר מעגלים. E אזי > = V 1 G =< V, E >.2 אם ורק אם G מהווה עץ. 2 n, יש לפחות 2 עלים. במשפט הבא נוכיח: בכל עץ מסדר - עמוד 4
משפט 8.3 יהא > E =< V, עץ מסדר 2 n. אזי יש לפחות 2 קודקודי קצה. הוכחת משפט 8.3: נניח בשלילה, ש- > E >= V, עץ מסדר לפחות 2 ובעל לכל היותר קודקוד קצה אחד.. deg v = 2 E = 2( n 1) = 2n ניעזר במשפטים 1.1 ו- 8.2: מתקיים 2 אך, אם על פי הנחת השלילה, מבין אברי v V 1.1 8.2 V יש שפרט אולי לקודקוד אחד, לכל קודקוד אחר יש ערכיות לפחות 2. לכל היותר קודקוד אחד בעל ערכיות 1, זה אומר 1 + 2( n 1) = 2n מזה נקבל, 1 ערכיות שאר הקודקודים לפחות עלה v deg בסתירה! v V עץ פורש של גרף: עץ פורש של גרף הוא מעין "שלד" שלו. מסתבר, (ראי משפט 8.4) שלכל גרף קיים לפחות עץ פורש אחד. נקדים בכמה הגדרות: הגדרה: תת גרף פורש של גרף. G המכיל את כל קודקודי G הוא תת גרף של G דוגמה 8.2:. K n הוא תת גרף פורש של Cn עץ פורש בגרף Gהוא תת גרף פורש של G שהוא גם עץ. דוגמה :8.3. K n הוא עץ פורש של P n.1 2. באיור הבא, הגרף שצלעותיו צבועות בכחול הוא עץ פורש של השריג מגודל 3 3 3, הכוונה לגרף מסדר 16 שקודקודיו מיוצגים על ידי צמתי שריג.(בשריג מגודל 3 מגודל 3 3, וקיימות 24 צלעות בין הקודקודים, לפי החיבורים של צמתי השריג ביניהם). - עמוד 5
3. עץ פורש זה אינו יחיד- שכן, האיור הבא מראה עץ פורש נוסף של השריג. שימו לב שעץ פורש זה איזומורפי לגרף! P16.. 4 ראי נוסחת קיילי בפרק הבא שם נספור את מספר עצי הפרישה השונים של K n בנושא עצי פרישה קיימים שפע של יישומים. למשל, אם מחפשים דרך זולה לקשר בין מסופי מחשב שונים, בין קווי טלפון, בתי חרושת או ערים שונות, הפתרון הוא בדרך כלל סוג של עץ פורש ביניהם. טבעי, אם כן, לשאול את השאלה הבאה: האם לכל גרף קשיר קיים עץ פורש? התשובה היא חיובית, כפי שנראה ממשפט 8.4. - עמוד 6
משפט 8.4 > E G >= V, גרף קשיר. אזי קיים לו עץ פורש. הוכחת משפט 8.4: יהא G גרף קשיר. אם G הוא עץ, אזי G עצמו מהווה עץ פורש כנדרש. אחרת, נתחיל להוריד צלעות, בסדר כל שהוא, בתנאי שבכל שלב, תת הגרף הנוצר נשאר קשיר. בשלב מסוים, נקבל תת גרף קשיר קריטי של G, זאת אומרת, אין צלע נוספת שניתנת לסילוק מבלי להפוך את תת הגרף הנשאר לגרף לא קשיר. נסמן תת גרף זה על ידי. H נשים לב לתכונותיהם של. H H מהווה תת גרף של G מסדר n -שכן הורדנו צלעות מ-, G אך לא קודקודים. כל צלע ב- H היא גשר, שכן H הוא תת גרף קשיר קריטי של שנוריד ממנו יהפוך את תת הגרף הנותר לגרף לא קשיר., G זאת אומרת כל צלע, G קיבלנו. לכן, לפי משפט 8.1, H הוא עץ. היות ו- H הוא תת גרף המכיל את כל קודקודי את הדרוש: H הוא עץ פורש של G מציאת עץ פורש של גרף ממושקל, בעל משקל מינימלי: להלן בעיה יישומית שיש לה השלכות מעשיות במדעי המחשב וביישומים אחרים: האלגוריתם של (1956) Kruskal למציאת עץ פורש של גרף קשיר ממושקל, בעל משקל מינימלי: מהלך האלגוריתם הוא הבא: מתחילים עם -הגרף הריק מסדר n שהוא יער המורכב מ-, n N n עצים איזומורפיים ל-. בכל שלב נבחר את הצלע ב- G בעלת המשקל המינימלי מבין כל K 1 הצלעות שנותרו בגרף ונצרף אותה בכפוף לתנאי שהוספתה אינה יוצרת מעגל. האלגוריתם נעצר כאשר בנינו עץ עם V צלעות.. הנה האלגוריתם בצורה פורמלית: 1 האלגוריתם: נתון: > E G =< V, גרף קשיר ממושקל מסדר. n - עמוד 7
המטרה: לבנות עץ פורש בעל משקל מינימלי, אותו נכנה עץ פורש מינימלי. התהליך:, השלב (0) = N n, G ומסמנים השלב ההתחלתי = 0 i : מתחילים בתת הגרף N n של.1. במילים E = 0 E, ( 0) = N n, G ומסמנים ההתחלתי = 0 i : מתחילים בתת הגרף N של n אחרות, מסדר הוא הגרף ההתחלתי, והוא נטול צלעות, בעוד ש- E 0 הוא אוסף כל n (0) הצלעות של G.. 2 השלב = 1 i : בוחרים צלע e מ- E בעלת משקל מינימלי מבין כל צלעות, E מוסיפים ל- 0 0 1 ( (1), ומסמנים את הגרף הנוצר על ידי את הצלע e (במילים אחרות, = (0) e 1 (1) 1 (0) וכן מסמנים = E. חסר מעגלים. (1) 1 E 0 \ e 1, E וכפוף לתנאי שהגרף 1 1 e 2 : i = 2 בוחרים צלע מ- E בעלת משקל מינימלי מבין כל צלעות.3 חסר מעגלים. (שימו לב שבשלב זה, אין אפשרות עדיין ליצור מעגל, אך. E 2 = E1 \ e2 (2) (1) = e2 התנאי עומד בעינו). מסמנים, (i) 4. חוזרים על שלב 3, עבור, i = s...,3,4 כאשר כל פעם מגדילים את קבוצת הצלעות ל- - בלי שיווצר מעגל באף שלב, עד אשר מגיעים לשלב בו אין יותר אפשרות להוספת צלעות. נוספות בלי ליצור מעגל. גרף "סופי" זה מכונה (i) הערה: נשים לב שמעצם הגדרתו, לכל, 1 i s גרף בעל i צלעות. - עמוד 8
דוגמא 8.4: להלן דוגמה של ביצוע האלגוריתם של Kruskal שלב אחרי שלב. תיאור תמונה האיור מימין מראה גרף ממושקל מסדר 7. ניצור עץ פורש שצלעותיה יסומנו בירוק. הצלעות בעלות המשקל המינימלי הן: CE,AD. AD נבחר מביניהן באופן שרירותי. בחירתה מסומנת על ידי צביעתה בירוק. כעת, CE היא הצלע בעלת משקל מינימלי שטרם נבחרה ושאינה יוצרת מעגל, ולכן היא מסומנת כצלע שניה. - עמוד 9
הצלע "הכי זולה" הבאה, היא DF בעלת משקל 6, ולכן מסומנת. שתי הצלעות הבאות בתור הן AB, ו- BE, שתיהן בעלות משקל 7. בוחרים (באופן שרירותי) מביניהם את. AB שימי לב: כעת הצלע BD מסומנת באדום, לסמן שלא ניתן לבחור אותו באף בחירה בהמשך, שכן הוספתה לעץ היתה יוצרת מעגל.(ABDA) התהליך ממשיך ובו מסמנים את הצלע הכי זולה מבין הצלעות נשארות, דהיינו BE בעלת משקל 7. שימי לב שבשלב זה, עוד הרבה צלעות נוספות מסומנות באדום, (בדקי שאת מבינה למה כל אחת כזאת צבועה כך). כעת התהליך מסתיים עם הוספת הצלע EG ממשקל 9; שימי לב שהוספנו 6 צלעות (כצפוי מעץ מסדר 7), ושהתקבל עץ פורש ממושקל בעל משקל 39 לאנימציה של האלגוריתם של Kruskal על גרפים נוספים, לחצי כאן. - עמוד 10
ניתוח האלגוריתם: אלגוריתם זה מהווה דוגמה של אלגוריתם חמדן Algorithm) (Greedy. הרעיון של אלגוריתם "חמדן" הוא שבכל שלב בוחרים את האפשרות הטובה ביותר הניראית לעין, מבלי לקחת בחשבון את השלכות הבחירה לטווח רחוק. בדרך כלל, אלגוריתם חמדן לא מובטח לתת את התוצאה הטובה ביותר, שכן בחירה "חמדנית" רגעית בשלב מסוים עלולה לגרום, לפעמים, לברירת מחדל פחות טובה בשלב מאוחר יותר. להמחשת העניין, נעיין באיורים הבאים: אלגוריתם חמדן פיתרון אופטימלי שני האיורים מתארים ניסיון לבנות מסילה בעלת אורך הקצר ביותר (במובן האוקלידי הרגיל) העוברת בין 8 הקודקודים המצוינים. לפי האלגוריתם החמדן, הצלע השלישית קצרה יותר מזו שבאיור מתחתיו, אך המסילה הראשונה "משלמת את המחיר לחמדנות שלה" בצלע האחרונה, ובכך אורך המצטבר של צלעות מסילת האלגוריתם החמדן גדול יותר מזה של המסילה מתחתיה, שהיא מהווה הפתרון האופטימלי. החידוש, אם כן, באלגוריתם של, Kruskal הוא שהוא תמיד נותן את הפתרון האופטימלי! במילים אחרות, העץ שנבנה לפי האלגוריתם (החמדן) של,Kruskal תמיד יתן עץ פורש בעל משקל מינימלי. הנה המשפט: - עמוד 11
משפט 8.5 האלגוריתם של Kruskal נותן עץ פורש מינימלי. הוכחה: עלינו להראות G, וכן, א. ב. שהגרף המתקבל מהאלגוריתם של קרוסקל הוא עץ פורש של שלעץ זה משקל מינימלי מבין כל העצים הפורשים את. G. s = n וש- 1,G א. נתייחס לסימנים מהאלגוריתם, ונוכיח כי תת הגרף הוא עץ פורש של הוכחה: קודם נראה, באופן אינדוקטיבי ש- חסר מעגלים.,(הגרף המתקבל מ- על ידי הוספת צלע אחת), הוא חסר מעגלים. נניח כי מעגלים, לפי כללי בנייתה מ- יתר על כן, (1). חסר מעגלים. אזי גם (0) (s 1) ( s 1) הוא קשיר, שכן G הוא קשיר, ואם היה ל- היה אפשר להוסיף לו גשר מהצלעות הנשארות ב יתכן. הוא חסר יותר ממרכיב קשירות אחד,, וכך היינו מגדילים את העץ, דבר שלא E s לבסוף, היות ו- אנו מסיקים ש- G), מכיל את כל קודקודי "כבר" (הרי, G מכילה את כל קודקודי הוא עץ פורש של ממשפט 8.2 נובע ש 1 n. s = Gבעל s צלעות (עייני בהערה לפני דוגמה 8.4). (0) G, דהיינו ש ) = ( s) נוכיח כי ב. הוא עץ פורש מינימלי של )ω הוא המינימלי מבין משקלות כל תת העצים הפורשים של. G לעץ פורש של G בעל משקל מינימלי נקרא עץ פורש אופטימלי.. ω ( ) = ω( עץ פורש אופטימלי של, G עלינו להראות כי אם סיימנו. = ( 1) n ) יהא אחרת, קיימת לפחות צלע אחת ב- שאיננה ב- שהתקבלו. נביט בסידרת צלעות - עמוד 12
e1 e2,..., e n 1 ei = uv ונסמן על ידי, e1 e2 (לפי סדר) מהאלגוריתם,..., את הצלע הראשונה מבין, e n 1. שאיננה ב- G היות ו-. e נביט בגרף, דהיינו זה שמתקבל מ- על ידי הוספת הצלע עץ פורש של i + e i u (שנסמנה על ידי ( המחברת בין ל-, v ולכן מכיל מעגל-אותו נסמן + e i p uv, קיימת מסילה ב- על ידי C -ראי איור.. p uv p uv תהא e צלע ב- שמשקלה מינימלי מבין כל צלעות. G הוא עץ פורש של ' = + e e i טענה: גם הגרף נביט בצלע. e היות ו- e אומרת, הגרף שייכת למעגל בגרף אינו גשר ב- e+ (למה?). זאת פירקה את המעגל היחיד i e, + e חסר מעגלים, (שכן הסרת e i C ' הוא גרף קשיר, = + e i e ' = + e i e ), ובעל שהיה קיים ב- e+ 1 n צלעות. לאור משפט 8.2, אנו מסיקים שהגרף i הוא עץ פורש של G.. ω( ') = ω( ) + ω( ei ) ω( יתר על כן, (e. e נשווה בין משקלות e i ו- מחד, הצלע e i נבחרה באלגוריתם של קרוסקל להיות הצלע בעלת משקל מינימלי מבין כל הצלעות..., e1 לא יוצרת מעגל., e2 בעלות התכונה שצירופה לצלעות 1 i e - עמוד 13
מאידך, גם הצירוף של לצלעות..., e1 לא יוצרת מעגל, שכן כל הצלעות הללו נמצאות בעץ, e2 e i 1 e. (חסר מעגלים). ω( ) ω( לכן, חייב להתקיים: (e e i ω(. אך ') ω( ) נקבל:, ω ( ') = ω( ) + ω( ei ) ω( אי לכך, מהשיוויון (e עץ אופטימלי (בעל משקל מינימלי מבין כל העצים הפורשים), ולכן אי השיוויון האחרון הוא שיוויון, וגם ' עץ אופטימלי! נשים לב שכל הצלעות של נמצאות ב-'. אם גם כל שאר צלעות נמצאות e 1, 1 e 2,... e i, e i, והוכחנו את הדרוש (שכן ' עץ אופטימלי ). אם לא, נחזור על תהליך הצלע הראשונה מבין e1, e2 שלא נמצאת ב-', (הרי היא תהיה הצלע הראשונה מבין,... en 1 ב-', נסיק כי ' = '',שהוא גם אופטימלי e שלא נמצאת ב-', -למה?!!) תוחלף בצלע אחר שהיתה ב- ' כדי ליצור עץ אחר (מאותם השיקולים שמהם הסקנו ש-' אופטימלי). ממשיכים כך,בתהליך e i+ 1, i+2,...e n 1. שמובטח להסתיים, עד שנקבל עץ אופטימלי שמכיל את כל צלעות בכך הוכחנו: אכן אופטימלי. סיכום נושאים ומונחים מ: יער עץ ותכונותיו תת גרף פורש, עץ פורש האלגוריתם של Kruskal - עמוד 14